# -*- coding:utf-8 -*-
# @Author : mistchan
# @Time : 2021/4/3 0003 17:05
# @File : main.py
# @Software: PyCharm

from openpyxl import load_workbook
from decimal import Decimal
import datetime
import os
import shutil

# 获得当前月
today_ = datetime.datetime.today()
month_ = today_.month

# 生成本月报销名称的文件夹
if not os.path.exists('%s月报销' % month_):
    os.mkdir('%s月报销' % month_)

# 读取费用执行表
excel_read = load_workbook('费用执行表.xlsx')
# 获取活动的工作簿
data = excel_read.active
# 构建统计项目费用的字典
result = {}

# 读取第C列的内容（费用明细项），遍历每个单元格的值
for i, v in enumerate(data['c']):
    if v.value:
        # 如果C列的单元格有值则获取对应第H列（金额）的值，并转换为字符串格式
        cell_value = str(data['h%s' % str(i + 1)].value)
        # 如果H列单元格的值为数字类型则转换其为双精度类型，以便精确运算小数相加
        # isdigit()不能直接判断浮点数，故按.分割后取整数部分判断
        if cell_value.split('.')[0].isdigit():
            cell_value = Decimal(cell_value)
        # 如果result没有对应的键则生成键值对，如果有则累加
        if not result.setdefault(v.value, ''):
            result[v.value] = cell_value
        else:

            result[v.value] += cell_value

# 删除费用明细项
if '费用明细项' in result.keys():
    result.pop('费用明细项')

# 按result的键值对读取报销粘贴单.xlsx并填入相关数据后保存
excel_to_create = load_workbook('报销粘贴单.xlsx')
sheet = excel_to_create.active
excel_read.save('.\\%s月报销\\%s月费用执行表.xlsx' % (month_, month_))
for k, val in result.items():
    sheet['b11'] = '%s月%s' % (month_, k)
    sheet['i11'] = val
    sheet['o2'] = '%s月' % month_

    excel_to_create.save('.\\%s月报销\\%s月%s.xlsx' % (month_, month_, k))

# 将剩余的文件copy入新建的文件夹并以本月打头重命名
files = ['汇款请批单.doc', '会议日程小结.xlsx', '讲课协议.doc']
for file in files:
    if os.path.isfile(file):
        shutil.copyfile(file, '.\\%s月报销\\%s月%s' % (month_, month_, file))
